Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
metadata.h
Go to the documentation of this file.
1/*
2 * Copyright 2025 Stanford University, NVIDIA Corporation
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18// Realm object metadata base implementation
19
20#ifndef REALM_METADATA_H
21#define REALM_METADATA_H
22
23#include "realm/event.h"
24#include "realm/id.h"
25#include "realm/nodeset.h"
26#include "realm/network.h"
27#include "realm/mutex.h"
28#include "realm/atomics.h"
29
30namespace Realm {
31
32 class GenEventImpl;
33
35 public:
38
39 enum State
40 {
44 STATE_INVALIDATE, // if invalidate passes normal request response
46 };
47
48 bool is_valid(void) const { return state == STATE_VALID; }
49
50 // used by owner, may need to send responses to early requests
51 void mark_valid(NodeSet &early_reqs);
52
53 // returns true if a response should be sent immediately (i.e. data is valid)
54 bool handle_request(int requestor);
55
56 // returns an Event for when data will be valid
58
59 void handle_response(void);
61
62 // these return true once all remote copies have been invalidated
63 bool initiate_cleanup(ID::IDType id, bool local_only = false);
64 bool handle_inval_ack(int sender);
65
66 protected:
67 virtual void do_invalidate(void) = 0;
68
70 State state; // current state
73
74 // for handling fragmentation of metadata responses
78 };
79
80 // active messages
81
84
85 static void handle_message(NodeID sender, const MetadataRequestMessage &msg,
86 const void *data, size_t datalen);
87 };
88
92 static void handle_message(NodeID sender, const MetadataResponseMessage &msg,
93 const void *data, size_t datalen);
94 };
95
98
99 static void handle_message(NodeID sender, const MetadataInvalidateMessage &msg,
100 const void *data, size_t datalen);
101 };
102
105
106 static void handle_message(NodeID sender, const MetadataInvalidateAckMessage &msg,
107 const void *data, size_t datalen);
108 };
109
110}; // namespace Realm
111
112#endif // ifndef REALM_METADATA_H
Definition event.h:50
::realm_id_t IDType
Definition id.h:32
Definition metadata.h:34
Event valid_event
Definition metadata.h:71
bool is_valid(void) const
Definition metadata.h:48
void handle_invalidate(void)
Mutex mutex
Definition metadata.h:69
atomic< char * > frag_buffer
Definition metadata.h:76
State
Definition metadata.h:40
@ STATE_VALID
Definition metadata.h:42
@ STATE_INVALID
Definition metadata.h:41
@ STATE_CLEANUP
Definition metadata.h:45
@ STATE_REQUESTED
Definition metadata.h:43
@ STATE_INVALIDATE
Definition metadata.h:44
Event request_data(int owner, ID::IDType id)
NodeSet remote_copies
Definition metadata.h:72
State state
Definition metadata.h:70
atomic< size_t > frag_bytes_received
Definition metadata.h:77
virtual void do_invalidate(void)=0
void mark_valid(NodeSet &early_reqs)
bool handle_inval_ack(int sender)
bool initiate_cleanup(ID::IDType id, bool local_only=false)
bool handle_request(int requestor)
void handle_response(void)
Definition nodeset.h:117
Definition mutex.h:223
Definition atomics.h:31
Definition activemsg.h:38
int NodeID
Definition nodeset.h:40
Definition metadata.h:103
static void handle_message(NodeID sender, const MetadataInvalidateAckMessage &msg, const void *data, size_t datalen)
ID::IDType id
Definition metadata.h:104
Definition metadata.h:96
ID::IDType id
Definition metadata.h:97
static void handle_message(NodeID sender, const MetadataInvalidateMessage &msg, const void *data, size_t datalen)
Definition metadata.h:82
static void handle_message(NodeID sender, const MetadataRequestMessage &msg, const void *data, size_t datalen)
ID::IDType id
Definition metadata.h:83
Definition metadata.h:89
size_t total_bytes
Definition metadata.h:91
size_t offset
Definition metadata.h:91
ID::IDType id
Definition metadata.h:90
static void handle_message(NodeID sender, const MetadataResponseMessage &msg, const void *data, size_t datalen)