Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
ddff950
Client config (sdmi centric)
clauspruefer Jan 23, 2026
dcc4b34
Single DB-node docker file
clauspruefer Jan 23, 2026
337a478
Add run container shell script
clauspruefer Jan 24, 2026
d9b0ce0
Disable iptables in docker daemon config
clauspruefer Jan 24, 2026
8503e66
Remove unrelevant runtime sub-data
clauspruefer Jan 24, 2026
5692699
Add local orchestrator code
clauspruefer Jan 24, 2026
054b108
Add docker metadata
clauspruefer Jan 24, 2026
70a08d6
Update docker related
clauspruefer Jan 26, 2026
1f0da9c
Add service metadata templates
clauspruefer Jan 26, 2026
bc2cacd
Add main orchestrator
clauspruefer Jan 26, 2026
34c7f62
Update config
clauspruefer Jan 26, 2026
75b90c4
Add json-rpc server component
clauspruefer Jan 26, 2026
3676b5f
Add server start script
clauspruefer Jan 26, 2026
6af53de
Add ESB metadata / processing logic
clauspruefer Jan 26, 2026
d5d8c05
Replace jsocket with local cleaned-up (working) version
clauspruefer Jan 30, 2026
ee47dcd
Fix bugs
clauspruefer Jan 30, 2026
74a442e
Add missing default values
clauspruefer Jan 30, 2026
acdcb34
Update (bug fix, working with modified jsocket)
clauspruefer Jan 30, 2026
81999a1
Add missing default values
clauspruefer Jan 30, 2026
f3c316a
Disable iptables globally in docker-daemon
clauspruefer Jan 30, 2026
adbe82e
Update RPC model
clauspruefer Jan 31, 2026
2091db7
Add domain properties
clauspruefer Jan 31, 2026
938d19a
Update service call metadata
clauspruefer Jan 31, 2026
c2ff770
Update
clauspruefer Jan 31, 2026
cefb386
Add global sql queries
clauspruefer Feb 2, 2026
9bd2bbe
Fix path
clauspruefer Feb 2, 2026
0af58da
Remove unneeded modules
clauspruefer Feb 2, 2026
f97c08d
Add queries
clauspruefer Feb 5, 2026
87b7d7c
Increase max nodes
clauspruefer Feb 5, 2026
70f8121
Make use of max_nodes config property
clauspruefer Feb 5, 2026
0840382
Describe replication order
clauspruefer Feb 5, 2026
f8bf320
Remove empty lines
clauspruefer Feb 5, 2026
1090568
Correct psycopg2 syntax
clauspruefer Feb 7, 2026
f1a2573
Add network reference property
clauspruefer Feb 7, 2026
7ade606
Column replacement will be handled internally
clauspruefer Feb 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions example/01-logical-replication/REPLICATION-ORDER.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Precise Replication Order

| NodeID | SrcNode | Function | ProcOn | Command |
| ------- | ------- | ----------------- | ------ | ----------------------------- |
| Node1 | node1 | node_pub_self | node | create pub 'pub-node1-table1' |
| Node2 | node2 | node_pub_self | node | create pub 'pub-node2-table1' |
| | node2 | node_sub_2others | node | create sub 'sub-node1-table1' |
| | node1 | others_sub_2node | orch | create sub 'sub-node2-table1' |
| Node3 | node3 | node_pub_self | node | create pub 'pub-node3-table1' |
| | node3 | node_sub_2others | node | create sub 'sub-node2-table1' |
| | node3 | node_sub_2others | node | create sub 'sub-node1-table1' |
| | node2 | others_sub_2node | orch | create sub 'sub-node3-table1' |
| | node1 | others_sub_2node | orch | create sub 'sub-node3-table1' |
11 changes: 11 additions & 0 deletions example/01-logical-replication/db-node-rpc/class_mapping.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class_mapping = {
'System': 'System',
'Network': 'Network',
'NetworkTopology': 'NetworkTopology',
'NetIPv4': 'NetIPv4',
'NetIPv6': 'NetIPv6',
'TopologyHost': 'TopologyHost',
'Database': 'Database',
'Table': 'Table',
'Column': 'Column'
}
46 changes: 46 additions & 0 deletions example/01-logical-replication/db-node-rpc/class_reference.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
references = {
'UpdateNetworkTopology': {
'System': {
'property_ref': 'System',
'children': {
'Network': {
'property_ref': 'Network'
},
'NetworkTopology': {
'property_ref': 'NetworkTopology',
'children': {
'NetIPv4': {
'property_ref': 'NetIPv4'
},
'NetIPv6': {
'property_ref': 'NetIPv6'
},
'TopologyHost': {
'property_ref': 'TopologyHost'
}
}
}
}
}
},
'InitDatabase': {
'Database': {
'property_ref': 'Database'
}
},
'CreateReplicaTable': {
'Database': {
'property_ref': 'Database',
'children': {
'Table': {
'property_ref': 'Table',
'children': {
'Column': {
'property_ref': 'Column'
}
}
}
}
}
}
}
13 changes: 13 additions & 0 deletions example/01-logical-replication/db-node-rpc/esbconfig.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import_classes = {
'service_implementation': [
'System',
'Network',
'NetworkTopology',
'TopologyHost',
'NetIPv4',
'NetIPv6',
'Database',
'Table',
'Column'
]
}
53 changes: 53 additions & 0 deletions example/01-logical-replication/db-node-rpc/json-rpc-server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import sys
import jsocket
import logging
import subprocess

from microesb import microesb

from class_reference import references as class_reference
from service_properties import service_properties
from class_mapping import class_mapping

logging.getLogger().addHandler(
logging.StreamHandler(sys.stdout)
)

logging.getLogger().setLevel(
logging.DEBUG
)


def get_current_ip_address():
cmd_get_ip = 'ip -h addr show dev eth0 | grep inet | cut -d " " -f 6'
res = subprocess.run(cmd_get_ip, shell=True, capture_output=True)
raw_ip = res.stdout.strip()
raw_ip_sep = raw_ip.find(b'/')
return raw_ip[:raw_ip_sep]


class JSONServer(jsocket.JsonServer):

def __init__(self, **kwargs):
super().__init__(**kwargs)

def _process_message(self, call_obj):
if isinstance(call_obj, dict):
print('Call obj:{}'.format(call_obj))
class_mapper = microesb.ClassMapper(
class_references=class_reference[call_obj['SYSServiceID']],
class_mappings=class_mapping,
class_properties=service_properties
)
res = microesb.ServiceExecuter().execute(
class_mapper=class_mapper,
service_data=call_obj
)
return { "Status": "ok" }
return { "Status": "error - objtype not dict()" }


server = JSONServer(
address=get_current_ip_address(),
port=64000
).server_loop()
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import json
import logging

from microesb import microesb

logger = logging.getLogger(__name__)


class System(microesb.ClassHandler):

def __init__(self):
super().__init__()

def update_network_topology(self):

self.json_transform()

net_config = {}
net_config['Network'] = self.Network.json_dict
net_config['NetworkTopology'] = self.NetworkTopology.TopologyHost.json_dict

with open('/tmp/net-config.json', 'w')as fh:
fh.write(json.dumps(net_config))


class Network(microesb.ClassHandler):

def __init__(self):
super().__init__()


class NetworkTopology(microesb.ClassHandler):

def __init__(self):
super().__init__()


class NetIPv4(microesb.ClassHandler):

def __init__(self):
super().__init__()


class NetIPv6(microesb.ClassHandler):

def __init__(self):
super().__init__()


class TopologyHost(microesb.MultiClassHandler):

def __init__(self):
super().__init__()


class Database(microesb.ClassHandler):

def __init__(self):
super().__init__()

def init_db(self):
pass

def create_replica_table(self):
pass


class Table(microesb.ClassHandler):

def __init__(self):
super().__init__()


class Column(microesb.MultiClassHandler):

def __init__(self):
super().__init__()
self.primary_key = False
self.name = None
self.type = None
self.default = None
Loading