| /*------------------------------------------------------------------------- |
| * |
| * identity.h |
| * Segment identity. |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *------------------------------------------------------------------------- |
| */ |
| |
| #ifndef IDENTITY_H |
| #define IDENTITY_H |
| |
| #include "utils/relcache.h" |
| #include "nodes/primnodes.h" |
| #include "nodes/pg_list.h" |
| |
| |
| struct SegmentIdentity; |
| struct StringInfoData; |
| struct ProcessIdentity; |
| |
| typedef struct SegmentFunctionList |
| { |
| bool login_as_default; |
| |
| bool module_motion; |
| bool module_log_sync; |
| } SegmentFunctionList; |
| |
| typedef struct ProcessFunctionList |
| { |
| } ProcessFunctionList; |
| |
| #define SEGMENT_IDENTITY_NAME_LENGTH 256 |
| |
| #define SEGMENT_IDENTITY_SER_LENGTH 17 |
| |
| typedef struct ProcessIdentity |
| { |
| bool init; |
| |
| /* Member that assign by Dispatcher. */ |
| int slice_id; /* slice id. */ |
| int id_in_slice; /* index in the slice. allocate during dispatch */ |
| int gang_member_num; /* num of qes in the slice. */ |
| int command_count; /* gp_command_count */ |
| bool is_writer; /* Metadata dispatch needs query executor access heap interface, so combocid need it. */ |
| TransactionId xid; |
| |
| /* Member that generated by above data. */ |
| char name[SEGMENT_IDENTITY_NAME_LENGTH]; /* Query Executor Name */ |
| |
| ProcessFunctionList function; |
| } ProcessIdentity; |
| |
| extern int slaveHostNumber; |
| |
| extern void SetSegmentIdentity(const char *name); |
| extern bool IsOnMaster(void); |
| extern const char *SerializeProcessIdentity(struct ProcessIdentity *id, int *msg_len); |
| extern void newSerializeProcessIdentity(struct ProcessIdentity *id, |
| struct StringInfoData *str); |
| extern bool SetupProcessIdentity(const char *str, bool newDisp); |
| extern void SetupDispatcherIdentity(int segmentNum); |
| |
| extern bool AmIMaster(void); |
| extern bool AmIStandby(void); |
| extern bool AmISegment(void); |
| |
| extern bool InitQDContext(struct ProcessIdentity *id); |
| |
| extern bool InitQEContext(struct ProcessIdentity *id, const char *str); |
| extern int GetQEIndex(void); |
| extern int GetQEGangNum(void); |
| extern int GetPlannerSegmentNum(void); |
| extern int GetQueryVsegNum(void); |
| extern int GetUserDefinedFunctionVsegNum(void); |
| extern int GetAnalyzeVSegNum(void); |
| extern int GetCopyFromVSegNum(void); |
| extern int GetRelOpt_bucket_num_fromOptions(List *options, int default_val); |
| extern bool GetRelOpt_appendonly_fromOptions(List *options, bool *appendonly); |
| extern int GetRelOpt_bucket_num_fromRel(Relation relation, int default_val); |
| extern int GetRelOpt_bucket_num_fromRangeVar(const RangeVar* rel_rv, int default_val); |
| extern int GetDefaultPartitionNum(void); |
| extern int GetDefaultMagmaBucketNum(void); |
| extern int GetHashDistPartitionNum(void); |
| extern int GetExternalTablePartitionNum(void); |
| |
| |
| /* Assert used for everyone */ |
| #define AssertOnMaster() Assert(AmIMaster()); |
| #define AssertOnSegment() Assert(AmISegment()); |
| |
| extern TransactionId GetMasterTransactionId(void); |
| extern void SetMasterTransactionId(TransactionId xid); |
| |
| extern void SetMasterAddress(char *address, int port); |
| extern void GetMasterAddress(char **address, int *port); |
| extern bool IsWriter(void); |
| |
| #endif /* IDENTITY_H */ |