Table of Contents
-
Pacemaker Development
-
Frequently Asked Questions
-
General Guidelines for All Languages
-
Copyright
-
Terminology
-
Documentation Guidelines
-
Books
-
Python Coding Guidelines
-
Python Boilerplate
-
Python Version Compatibility
-
Formatting Python Code
-
C Coding Guidelines
-
Code Organization
-
Pacemaker Libraries
-
Public versus Internal APIs
-
API Symbol Naming
-
API Header File Naming
-
API Documentation
-
Public API Deprecation
-
C Boilerplate
-
Line Formatting
-
Comments
-
Operators
-
Control Statements (if, else, while, for, switch)
-
Macros
-
Memory Management
-
Structures
-
Variables
-
Pointers
-
Globals
-
Variable Naming
-
Booleans
-
String Handling
-
Define Constants for Magic Strings
-
String-Related Library Functions
-
char*, gchar*, and GString
-
Regular Expressions
-
Enumerations
-
Flag groups
-
Functions
-
Function Naming
-
Function Definitions
-
Return Values
-
Public API Functions
-
Logging and Output
-
Logging Vs. Output
-
Common Guidelines for All Messages
-
Log Levels
-
Logging
-
Assertion Logging
-
Output
-
XML
-
External Libraries
-
Naming
-
Private Data
-
Wrapper Functions
-
Makefiles
-
vim Settings
-
Coding Particular Pacemaker Components
-
Controller
-
Join sequence
-
Fencer
-
Initiating a fencing request
-
Fencing queries
-
Fencing operations
-
Fencing replies
-
Fencing History
-
Scheduler
-
Challenges
-
Cluster Working Set
-
Resources
-
Nodes
-
Actions
-
Colocations
-
Orderings
-
C Development Helpers
-
Refactoring
-
Sanitizers
-
Unit Testing
-
Organization
-
Adding a test
-
Writing the test
-
Assertions
-
Running
-
Code Coverage
-
Debugging
-
gdb
-
Evolution of the project
-
Origin in Heartbeat project
-
Influence of Heartbeat on Pacemaker
-
Notable Restructuring Steps in the Codebase
-
Glossary