প্রকল্প সম্পর্কে

ChaosSQL হলো ডাটাবেস কনকারেন্সি ডিফেক্ট শনাক্ত করার জন্য একটি টেস্টিং টুল। এর README অনুযায়ী, এটি PostgreSQL, MySQL এবং SQLite-এর জন্য ডিটারমিনিস্টিক কনকারেন্সি এবং ইনভ্যারিয়েন্ট টেস্টিং সম্পাদন করে, যার লক্ষ্য হলো প্রোডাকশনে পৌঁছানোর আগেই CI/CD-তে সাইলেন্ট ডাটা করাপশন, রাইট স্কিউ (write skew) এবং লস্ট আপডেট (lost updates) খুঁজে বের করা। এটি যেভাবে কাজ করে এই প্রজেক্টটি একটি স্কিমা এবং সিড ডাটাসেটের বিপরীতে কনকারেন্ট ওয়ার্কার ট্রানজ্যাকশন শিডিউল করে, এক্সিকিউশনের পর ব্যবহারকারী-নির্ধারিত ইনভ্যারিয়েন্টগুলো পরীক্ষা করে এবং কোনো ভায়োলেশন দেখা দিলে একটি মিনিমাল রিপ্রোডাকশন তৈরি করে। এটি একটি ডিটারমিনিস্টিক সিড এবং একটি সিন্থেসাইজড Go রিপ্রোডাকশন টেস্ট ফাইল (repro_test.go) রিপোর্ট করে যা টেস্ট সুইটে যুক্ত করা যেতে পারে। README-তে উল্লেখ করা হয়েছে যে এর আউটপুটে লস্ট আপডেট (P4) এবং রাইট স্কিউ (A5B)-এর মতো অ্যানোমালি ক্লাসিফিকেশন অন্তর্ভুক্ত থাকে। ইন্টারফেসসমূহ CLI: স্ট্যান্ডঅ্যালোন বাইনারিটি go install github.com/bregaldahq/chaossql/cmd/chaossql এর মাধ্যমে ইনস্টল করা হয় এবং এতে কোনো CGO ডিপেন্ডেন্সি নেই। এর ডকুমেন্ট করা সাবকমান্ডগুলোর মধ্যে রয়েছে run, demo, ui, diff, mutate, swarm এবং proxy। ডেমো: দশটি প্যাকেজড সিনারিও ব্যাংকিং লস্ট আপডেট, ইনভেন্টরি ওভারসেল, হসপিটাল রাইট স্কিউ, রিড স্কিউ, ডার্টি রাইট, সার্কুলার ইনফরমেশন ফ্লো, ডার্টি রিড, অ্যান্টি-ডিপেন্ডেন্সি, ডেডলক সাইকেল এবং ফরেন কি ক্যাসকেড ডেডলক কভার করে। UI: একটি লোকাল ট্রেস ভিজুয়ালাইজার যাতে ওয়ার্কার সুইমলেন টাইমলাইন, একটি ইন্টারঅ্যাক্টিভ Adya ডিপেন্ডেন্সি গ্রাফ, ফুল ট্রেস এবং শ্রাঙ্ক মিনিমাল রিপ্রোডাকশনের মধ্যে তুলনা এবং একটি স্টেটমেন্ট ইন্সপেক্টর রয়েছে যা SQL, প্যারামিটার এবং ল্যাটেন্সি দেখায়। SDKs: একটি Go প্যাকেজ (pkg/chaostest) go test-এর সাথে ইন্টিগ্রেট করে; একটি Python প্যাকেজ যা pip থেকে ইনস্টল করা হয় এবং pytest ও unittest-এর সাথে কাজ করে এবং একটি pytest ফিক্সচার অফার করে; একটি TypeScript প্যাকেজ (npm-এ at-chaossql-test) যা Vitest, Jest এবং Node.js টেস্ট রানারকে লক্ষ্য করে তৈরি। রিপোর্টিং: GitHub Code Scanning-এর জন্য SARIF 2.1.0 এক্সপোর্ট, যার রুলগুলো CWE-362-এর সাথে ম্যাপ করা। CI: একটি GitHub Action (bregaldahq/chaossql, README-তে v1.5.0 হিসেবে উল্লেখ করা হয়েছে) ইনভ্যারিয়েন্ট ফেইলিউরের কারণে পুল রিকোয়েস্ট ব্লক করতে পারে, PR কমেন্ট পোস্ট করতে পারে এবং মিনিমাল এক্সিকিউশন ট্রেস সহ একটি স্টেপ সামারি পাবলিশ করতে পারে। মাল্টি-ইঞ্জিন এবং মিউটেশন ফিচার mutate ডিলে পরিবর্তন করে, নেস্টেড সেভপয়েন্ট ইনজেক্ট করে, কজালি ভ্যালিড ট্রানজ্যাকশন স্টেপগুলো শাফল করে এবং লক অ্যাকুইজিশন অর্ডার ইনভার্ট করে একটি সিনারিওর ভেরিয়েন্ট তৈরি করে; এটি ভেরিয়েন্ট, আউটপুট ডিরেক্টরি, সিড এবং JSON ফ্ল্যাগ এক্সপোজ করে। swarm সীমাবদ্ধ কনকারেন্সি, ঐচ্ছিক Markdown সামারি এবং JSON আউটপুট সহ বেশ কয়েকটি ড্রাইভারের (sqlite, mock, postgres, mysql) মাধ্যমে সিনারিও স্যুট রান করে। ড্রাইভার DSN-গুলো POSTGRES_DSN এবং MYSQL_DSN এনভায়রনমেন্ট ভেরিয়েবল থেকে রেজলভ করা হয়। একটি হেডলেস WebAssembly এবং Web Worker স্ট্রেস হারনেস একটি make টার্গেটের মাধ্যমে বর্ণনা করা হয়েছে, যার লক্ষ্য হলো দীর্ঘ স্ট্রেস রানের সময় বাউন্ডেড লিনিয়ার মেমরি এবং নন-ব্লকিং গ্রাফ লেআউট নিশ্চিত করা। লেয়ার-৭ প্রক্সি chaossql proxy একটি অ্যাপ্লিকেশন এবং ডাটাবেসের মাঝে অবস্থান করে, PostgreSQL 3.0 বা MySQL ওয়্যার প্রোটোকল ব্যবহার করে এবং মাইক্রো-জিটার ও প্রি-কমিট ব্যারিয়ার ইনজেক্ট করে, পাশাপাশি একটি লাইভ শ্যাডো ডিপেন্ডেন্সি সিরিয়ালাইজেশন গ্রাফ তৈরি করে যা রিয়েল টাইমে অ্যানোমালি ক্লাসিফাই করে। এটি SARIF এক্সপোর্ট করতে পারে এবং একটি কনফিগারযোগ্য পোর্টে JSON টেলিমেট্রি সহ একটি ওয়েব UI সার্ভ করতে পারে। README-তে বলা হয়েছে যে এটি ব্যবহার করার জন্য অ্যাপ্লিকেশন কোড পরিবর্তন করার প্রয়োজন নেই। প্রজেক্ট ডিটেইলস এটি Go (ব্যাজ অনুযায়ী ১.২২ বা তার নতুন সংস্করণ) ভাষায় লেখা, MIT লাইসেন্সপ্রাপ্ত, যার একটি ডকুমেন্টেশন পোর্টাল, ব্রাউজার-ভিত্তিক WebAssembly প্লেগ্রাউন্ড এবং কমান্ডগুলোতে রেফারেন্স করা একটি উদাহরণ ডিরেক্টরি রয়েছে। README-তে আর্লি অ্যাক্সেস হিসেবে বেসলাইন ট্র্যাকিং এবং পুল রিকোয়েস্ট কমেন্ট সহ একটি হোস্ট করা ক্লাউড সার্ভিসের কথা উল্লেখ করা হয়েছে, পাশাপাশি ভেন্ডর দ্বারা অফার করা কমার্শিয়াল কনকারেন্সি অডিট রয়েছে; এগুলো ভেন্ডর সার্ভিস, ওপেন রিপোজিটরির অংশ নয়।