Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AckTable ¶
type AckTable struct {
// contains filtered or unexported fields
}
func NewAckTracker ¶
func NewAckTracker() *AckTable
func (*AckTable) GetNumAcks ¶
type MessageHeap ¶
func (MessageHeap) IsEmpty ¶
func (queue MessageHeap) IsEmpty() bool
func (MessageHeap) Len ¶
func (queue MessageHeap) Len() int
func (MessageHeap) Less ¶
func (queue MessageHeap) Less(i, j int) bool
func (MessageHeap) Peek ¶
func (queue MessageHeap) Peek() *pb.MessageLC
func (*MessageHeap) Pop ¶
func (queue *MessageHeap) Pop() interface{}
func (*MessageHeap) Push ¶
func (queue *MessageHeap) Push(x interface{})
func (MessageHeap) Swap ¶
func (queue MessageHeap) Swap(i, j int)
type MessageLCFIFO ¶
type MessageLCFIFO struct {
// contains filtered or unexported fields
}
func NewMessageLCFifo ¶
func NewMessageLCFifo() *MessageLCFIFO
func (*MessageLCFIFO) Len ¶
func (queue *MessageLCFIFO) Len() int
func (*MessageLCFIFO) Pop ¶
func (queue *MessageLCFIFO) Pop() *api.MessageLC
func (*MessageLCFIFO) Push ¶
func (queue *MessageLCFIFO) Push(message *api.MessageLC)
type MessageLCRecvQueue ¶
type MessageLCRecvQueue struct {
// contains filtered or unexported fields
}
func NewMessageLCRecvQueue ¶
func NewMessageLCRecvQueue(groups []string, verbose bool) *MessageLCRecvQueue
func (*MessageLCRecvQueue) IsEmpty ¶
func (queue *MessageLCRecvQueue) IsEmpty() bool
func (*MessageLCRecvQueue) Len ¶
func (queue *MessageLCRecvQueue) Len() int
func (*MessageLCRecvQueue) Pop ¶
func (queue *MessageLCRecvQueue) Pop() *pb.MessageLC
Pop:
Controlla se vi sono messaggi nella coda. Se il messaggio in cima alla coda risulta pronto per essere rilasciato allora la coda lo rilascia in caso negativo questo metodo ritorna null. null indica che la coda non ha messaggi da rilasciare.
type MessageTable ¶
type MessageTable struct {
// contains filtered or unexported fields
}
func NewMessageTable ¶
func NewMessageTable(groupsize int) *MessageTable
func (*MessageTable) Insert ¶
func (table *MessageTable) Insert(message *api.MessageLC) error
Il metodo Insert() rappresenta il cuore della message table. Se un messaggio arriva ho 4 possibili casi dati dalle risposte a due domande:
- Il messaggio è un ack?
- Il messaggio è gia stato registrato?
Se il messaggio non è un ack e non è stato registrato:
allora creo una nuova entry nella tabella con le informazioni del messaggio e ritorno
Se il messaggio è un ack e il messaggio a cui risponde è registrato:
aggiorno le informazioni dell messaggio, indicando che ha ricevuto un nuovo ack.
Se il messaggio è un ack e il messaggio a cui risponde non è registrato:
ho un caso in cui mi è arrivato prima l'ack di un messaggio del messaggio stesso. In questo caso devo creare nella tabella una entry in cui dico: in arrivo c'è un messaggio con clock dato dall'ack, ma non ho ancora il messaggio stesso.
Se il messaggio non è un ack ed é stato gia registrato:
Questo caso risulta dal caso di sopra, quindi aggiorno l'entry gia esistente con il nuovo messaggio.
func (*MessageTable) IsReady ¶
func (table *MessageTable) IsReady(messageID string) (bool, error)
IsReady:
La funzione IsReady si occupa di stabilire se un messaggio è pronto per essere rilasciato all utente oppure no. Controlla che il messaggio input abbia ricevuto tutti gli ack e che non ci siano messaggi in arrivo con clock minore del suo.
func (*MessageTable) Remove ¶
func (table *MessageTable) Remove(messageID string) error
type TableEntry ¶
type TableEntry struct {
// contains filtered or unexported fields
}
Click to show internal directories.
Click to hide internal directories.