tostido's picture
download
raw
9.51 kB
import os
import json
import shutil
import time
class Kernel:
def __init__(self, kernel_dir='data/kernel', link_name='latest.link'):
self.kernel_dir = os.path.abspath(kernel_dir)
self.versions_dir = os.path.join(self.kernel_dir, 'versions')
self.latest_link = os.path.join(self.kernel_dir, link_name)
# Ensure directories exist
os.makedirs(self.kernel_dir, exist_ok=True)
os.makedirs(self.versions_dir, exist_ok=True)
self.sovereign_ids = []
self.version_file = None
self._load_state()
def _load_state(self):
if os.path.exists(self.latest_link):
try:
with open(self.latest_link, 'r') as f:
version_filename = f.read().strip()
if not version_filename:
self.sovereign_ids = []
self.version_file = None
return
version_path = os.path.join(self.versions_dir, version_filename)
self.version_file = version_path
if os.path.exists(version_path):
try:
with open(version_path, 'r') as f:
content = f.read().strip()
# Skip files that are empty or contain only null bytes
if not content or content.startswith('\x00'):
self.sovereign_ids = []
self.version_file = None
return
self.sovereign_ids = json.loads(content)
except (json.JSONDecodeError, ValueError, UnicodeDecodeError) as e:
# File is corrupted or invalid JSON, treat as empty
self.sovereign_ids = []
self.version_file = None
else:
self.sovereign_ids = []
self.version_file = None
except Exception as e:
# Any error reading latest.link, treat as empty
self.sovereign_ids = []
self.version_file = None
else:
self.sovereign_ids = []
self.version_file = None
def amend(self, new_sovereign_id):
"""
Add a new certified function sovereign ID to the kernel and create a new version.
Atomically update latest.link to point to the new version file.
"""
# Only add if sovereign ID is not already present (deduplication)
if new_sovereign_id not in self.sovereign_ids:
# Ensure versions directory exists
os.makedirs(self.versions_dir, exist_ok=True)
self.sovereign_ids.append(new_sovereign_id)
timestamp = time.strftime('%Y%m%d_%H%M%S')
version_filename = f'kernel_{timestamp}.json'
version_path = os.path.join(self.versions_dir, version_filename)
with open(version_path, 'w') as f:
json.dump(self.sovereign_ids, f)
# Atomically update latest.link as a text file
tmp_link = self.latest_link + '.tmp'
with open(tmp_link, 'w') as f:
f.write(version_filename)
# Windows-compatible atomic file replace
# Delete old file first if it exists (Windows requires this)
# Add retry logic for Windows file locking issues
max_retries = 3
retry_delay = 0.1 # 100ms between retries
success = False
for attempt in range(max_retries):
try:
if os.path.exists(self.latest_link):
# Try to remove with retry
try:
os.remove(self.latest_link)
except PermissionError:
# File might be locked - wait and retry
if attempt < max_retries - 1:
time.sleep(retry_delay * (attempt + 1)) # Exponential backoff
continue
else:
# Last attempt - try to force unlock on Windows
try:
# On Windows, try to remove read-only flag first
import stat
os.chmod(self.latest_link, stat.S_IWRITE)
os.remove(self.latest_link)
except Exception:
# If still locked, log warning but continue
print(f"[Kernel] Warning: Could not remove locked file {self.latest_link}, will try to overwrite")
# Try atomic rename (preferred method)
os.rename(tmp_link, self.latest_link)
success = True
break
except (OSError, PermissionError) as e:
if attempt < max_retries - 1:
# Wait before retry
time.sleep(retry_delay * (attempt + 1))
continue
else:
# Last attempt - try copy + delete approach
try:
import shutil
# Try to remove with chmod first
if os.path.exists(self.latest_link):
try:
import stat
os.chmod(self.latest_link, stat.S_IWRITE)
os.remove(self.latest_link)
except Exception:
pass # Ignore if still can't remove
shutil.move(tmp_link, self.latest_link)
success = True
break
except Exception as e2:
# Final fallback: log error but don't crash
# The version file was already created successfully, so data is safe
print(f"[Kernel] Warning: Could not update latest.link: {e2}")
print(f"[Kernel] Version file created successfully: {version_path}")
print(f"[Kernel] You may need to manually update latest.link or restart the system")
# Clean up temp file
try:
if os.path.exists(tmp_link):
os.remove(tmp_link)
except:
pass
# Still return True since the version file was created
success = True
break
if not success:
# If all retries failed, at least clean up temp file
try:
if os.path.exists(tmp_link):
os.remove(tmp_link)
except:
pass
self.version_file = version_path
return True # Sovereign ID was added
else:
return False # Sovereign ID already exists
def rollback(self):
"""
Atomically switch latest.link back to the previous kernel version file.
"""
try:
# Find previous version file
versions = sorted(os.listdir(self.versions_dir))
if len(versions) < 2:
return False # No previous version to roll back to
prev_version = versions[-2]
prev_path = os.path.join(self.versions_dir, prev_version)
# Atomically update latest.link as a text file
tmp_link = self.latest_link + '.tmp'
with open(tmp_link, 'w') as f:
f.write(prev_version)
os.replace(tmp_link, self.latest_link)
self.version_file = prev_path
try:
with open(prev_path, 'r') as f:
content = f.read().strip()
# Skip files that are empty or contain only null bytes
if not content or content.startswith('\x00'):
self.sovereign_ids = []
return False
self.sovereign_ids = json.loads(content)
return True
except (json.JSONDecodeError, ValueError, UnicodeDecodeError):
# Previous version is corrupted, treat as failed rollback
self.sovereign_ids = []
return False
except Exception:
return False
def get_sovereign_ids(self):
return list(self.sovereign_ids)
# Example usage:
if __name__ == "__main__":
kernel = Kernel()
print("Current Sovereign IDs:", kernel.get_sovereign_ids())
kernel.amend("hash-1234567890abcdef")
print("After amendment:", kernel.get_sovereign_ids())
kernel.rollback()
print("After rollback:", kernel.get_sovereign_ids())

Xet Storage Details

Size:
9.51 kB
·
Xet hash:
31d1884ab02245898b29757e3fd692afd4a439b30e646ea703ea2a8ef987eeec

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.