aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/include
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-04-18 12:44:26 +0200
committerGitHub Enterprise <[email protected]>2024-04-18 12:44:26 +0200
commit6d634ab59c05adf1ba028d95b16031a7f8e8db2a (patch)
tree87e8215fed65506f98f6838b2af08c4ffd5819f0 /src/zenutil/include
parentzen startup hardening (#49) (diff)
downloadzen-6d634ab59c05adf1ba028d95b16031a7f8e8db2a.tar.xz
zen-6d634ab59c05adf1ba028d95b16031a7f8e8db2a.zip
improved lock file handling (#50)
- Feature: `zen down` - --`data-dir` to specify a data directory to deduce which zen instance to bring down - Feature: `zen attach` - --`data-dir` to specify a data directory to deduce which zen instance to attach to222 - Feature: `zen status` - --`port` filter running zen instances based on port - --`data-dir` filter running zen instances based on information in the data directory - Improvement: Trying to load a compact binary object from an empty file no longer causes access violation
Diffstat (limited to 'src/zenutil/include')
-rw-r--r--src/zenutil/include/zenutil/zenserverprocess.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/zenutil/include/zenutil/zenserverprocess.h b/src/zenutil/include/zenutil/zenserverprocess.h
index 720b30766..af5125471 100644
--- a/src/zenutil/include/zenutil/zenserverprocess.h
+++ b/src/zenutil/include/zenutil/zenserverprocess.h
@@ -15,6 +15,8 @@
namespace zen {
+class CbObject;
+
/** Zen Server Environment configuration
This class allows a user to configure where a spawned server should place any
@@ -171,10 +173,11 @@ public:
void Initialize();
[[nodiscard]] bool InitializeReadOnly();
- [[nodiscard]] ZenServerEntry* Lookup(int DesiredListenPort);
+ [[nodiscard]] ZenServerEntry* Lookup(int DesiredListenPort) const;
+ [[nodiscard]] ZenServerEntry* LookupByEffectivePort(int Port) const;
ZenServerEntry* Register(int DesiredListenPort);
void Sweep();
- void Snapshot(std::function<void(const ZenServerEntry&)>&& Callback);
+ void Snapshot(std::function<void(const ZenServerEntry&)>&& Callback) const;
inline bool IsReadOnly() const { return m_IsReadOnly; }
private:
@@ -185,4 +188,18 @@ private:
bool m_IsReadOnly = true;
};
+struct LockFileInfo
+{
+ int32_t Pid;
+ Oid SessionId;
+ uint16_t EffectiveListenPort;
+ bool Ready;
+ std::filesystem::path DataDir;
+ std::filesystem::path ExecutablePath;
+};
+
+CbObject MakeLockFilePayload(const LockFileInfo& Info);
+LockFileInfo ReadLockFilePayload(const CbObject& Payload);
+bool ValidateLockFileInfo(const LockFileInfo& Info, std::string& OutReason);
+
} // namespace zen