From 77f08af6823c404cff71019e792b5c606db841cd Mon Sep 17 00:00:00 2001 From: Mark Mercado Date: Thu, 18 Feb 2021 05:35:31 -0500 Subject: [PATCH] Create raft data_dir if necessary (#1846) Close #1760 --- patroni/dcs/raft.py | 6 ++++++ patroni/utils.py | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/patroni/dcs/raft.py b/patroni/dcs/raft.py index 3a9dab2a..811e3ff6 100644 --- a/patroni/dcs/raft.py +++ b/patroni/dcs/raft.py @@ -5,6 +5,7 @@ import threading import time from patroni.dcs import AbstractDCS, ClusterConfig, Cluster, Failover, Leader, Member, SyncState, TimelineHistory +from ..utils import validate_directory from pysyncobj import SyncObj, SyncObjConf, replicated, FAIL_REASON from pysyncobj.transport import Node, TCPTransport, CONNECTION_STATE @@ -275,6 +276,11 @@ class Raft(AbstractDCS): partner_addrs.append(self_addr) self_addr = None + # Create raft data_dir if necessary + raft_data_dir = config.get('data_dir', '') + if raft_data_dir != '': + validate_directory(raft_data_dir) + ready_event = threading.Event() file_template = os.path.join(config.get('data_dir', ''), (self_addr or '')) conf = SyncObjConf(password=config.get('password'), appendEntriesUseBatch=False, diff --git a/patroni/utils.py b/patroni/utils.py index 637291e5..0bbddb4d 100644 --- a/patroni/utils.py +++ b/patroni/utils.py @@ -1,3 +1,4 @@ +import errno import json.decoder as json_decoder import logging import os @@ -461,7 +462,8 @@ def validate_directory(d, msg="{} {}"): os.makedirs(d) except OSError as e: logger.error(e) - raise PatroniException(msg.format(d, "couldn't create the directory")) + if e.errno != errno.EEXIST: + raise PatroniException(msg.format(d, "couldn't create the directory")) elif os.path.isdir(d): try: fd, tmpfile = tempfile.mkstemp(dir=d)