Git Product home page Git Product logo

pg_paxos's Issues

cannot use views

CREATE TABLE jobs(job_id SERIAL PRIMARY KEY, key_to_be_incremented INTEGER NOT NULL, being_worked_on_by TEXT, completed BOOLEAN DEFAULT FALSE , created_at TIMESTAMP, updated_at TIMESTAMP);
CREATE VIEW queued_jobs AS SELECT job_id, created_at, updated_at FROM jobs WHERE being_worked_on_by IS NULL AND completed IS NOT TRUE;

srangarajan=# select * from queued_jobs;
ERROR:  relation "(null)" is not managed by pg_paxos

license

What is the license for this extension? I see LGPL3 in the metadata.json, is that authoritative?

compile failed

Fedora 29 gcc 8.3.1

[root@node177 pg_paxos]# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -fPIC -std=c99 -Wall -Wextra -Werror -Wno-unused-parameter -Iinclude -I/usr/local/pgsql/include -I. -I./ -I/usr/local/pgsql/include/server -I/usr/local/pgsql/include/internal -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/pg_paxos.o src/pg_paxos.c -MMD -MP -MF .deps/pg_paxos.Po
src/pg_paxos.c: In function ‘_PG_init’:
src/pg_paxos.c:138:22: error: assignment to ‘ProcessUtility_hook_type’ {aka ‘void (*)(struct PlannedStmt *, const char *, enum , struct ParamListInfoData *, struct QueryEnvironment *, struct _DestReceiver *, char )’} from incompatible pointer type ‘void ()(Node *, const char *, ProcessUtilityContext, struct ParamListInfoData *, DestReceiver *, char )’ {aka ‘void ()(struct Node *, const char *, enum , struct ParamListInfoData *, struct _DestReceiver *, char *)’} [-Werror=incompatible-pointer-types]
ProcessUtility_hook = PgPaxosProcessUtility;
^
In file included from /usr/local/pgsql/include/server/nodes/pg_list.h:40,
from /usr/local/pgsql/include/server/access/tupdesc.h:19,
from /usr/local/pgsql/include/server/funcapi.h:21,
from src/pg_paxos.c:17:
src/pg_paxos.c: In function ‘PgPaxosPlanner’:
/usr/local/pgsql/include/server/nodes/nodes.h:628:27: error: implicit declaration of function ‘typeof’; did you mean ‘pg_typeof’? [-Werror=implicit-function-declaration]
#define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
^~~~~~
src/pg_paxos.c:206:23: note: in expansion of macro ‘copyObject’
Query *paxosQuery = copyObject(query);
^~~~~~~~~~
/usr/local/pgsql/include/server/nodes/nodes.h:628:40: error: expected ‘)’ before ‘copyObjectImpl’
#define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
~ ^~~~~~~~~~~~~~
src/pg_paxos.c:206:23: note: in expansion of macro ‘copyObject’
Query *paxosQuery = copyObject(query);
^~~~~~~~~~
/usr/local/pgsql/include/server/nodes/nodes.h:628:25: error: initialization of ‘Query *’ {aka ‘struct Query *’} from ‘int’ makes pointer from integer without a cast [-Werror=int-conversion]
#define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
^
src/pg_paxos.c:206:23: note: in expansion of macro ‘copyObject’
Query *paxosQuery = copyObject(query);
^~~~~~~~~~
src/pg_paxos.c: In function ‘PgPaxosExecutorStart’:
src/pg_paxos.c:554:3: error: implicit declaration of function ‘PreventTransactionChain’; did you mean ‘PreventInTransactionBlock’? [-Werror=implicit-function-declaration]
PreventTransactionChain(isTopLevel, "paxos commands");
^~~~~~~~~~~~~~~~~~~~~~~
PreventInTransactionBlock
src/pg_paxos.c:573:42: error: passing argument 1 of ‘pg_analyze_and_rewrite’ from incompatible pointer type [-Werror=incompatible-pointer-types]
queryTreeList = pg_analyze_and_rewrite(parseTreeNode, paxosQueryString, NULL, 0);
^~~~~~~~~~~~~
In file included from /usr/local/pgsql/include/server/tcop/utility.h:17,
from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/tcopprot.h:51:14: note: expected ‘RawStmt *’ {aka ‘struct RawStmt *’} but argument is of type ‘Node *’ {aka ‘struct Node *’}
extern List *pg_analyze_and_rewrite(RawStmt *parsetree,
^~~~~~~~~~~~~~~~~~~~~~
src/pg_paxos.c:573:19: error: too few arguments to function ‘pg_analyze_and_rewrite’
queryTreeList = pg_analyze_and_rewrite(parseTreeNode, paxosQueryString, NULL, 0);
^~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/pgsql/include/server/tcop/utility.h:17,
from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/tcopprot.h:51:14: note: declared here
extern List *pg_analyze_and_rewrite(RawStmt *parsetree,
^~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/pgsql/include/server/nodes/pg_list.h:40,
from /usr/local/pgsql/include/server/access/tupdesc.h:19,
from /usr/local/pgsql/include/server/funcapi.h:21,
from src/pg_paxos.c:17:
src/pg_paxos.c: In function ‘PgPaxosProcessUtility’:
/usr/local/pgsql/include/server/nodes/nodes.h:628:40: error: expected ‘)’ before ‘copyObjectImpl’
#define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
~ ^~~~~~~~~~~~~~
src/pg_paxos.c:826:21: note: in expansion of macro ‘copyObject’
Node *rawQuery = copyObject(copyStatement->query);
^~~~~~~~~~
/usr/local/pgsql/include/server/nodes/nodes.h:628:25: error: initialization of ‘Node *’ {aka ‘struct Node *’} from ‘int’ makes pointer from integer without a cast [-Werror=int-conversion]
#define copyObject(obj) ((typeof(obj)) copyObjectImpl(obj))
^
src/pg_paxos.c:826:21: note: in expansion of macro ‘copyObject’
Node *rawQuery = copyObject(copyStatement->query);
^~~~~~~~~~
src/pg_paxos.c:841:46: error: passing argument 1 of ‘pg_analyze_and_rewrite’ from incompatible pointer type [-Werror=incompatible-pointer-types]
List *queryList = pg_analyze_and_rewrite(rawQuery, queryString,
^~~~~~~~
In file included from /usr/local/pgsql/include/server/tcop/utility.h:17,
from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/tcopprot.h:51:14: note: expected ‘RawStmt *’ {aka ‘struct RawStmt *’} but argument is of type ‘Node *’ {aka ‘struct Node *’}
extern List *pg_analyze_and_rewrite(RawStmt *parsetree,
^~~~~~~~~~~~~~~~~~~~~~
src/pg_paxos.c:841:23: error: too few arguments to function ‘pg_analyze_and_rewrite’
List *queryList = pg_analyze_and_rewrite(rawQuery, queryString,
^~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/pgsql/include/server/tcop/utility.h:17,
from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/tcopprot.h:51:14: note: declared here
extern List *pg_analyze_and_rewrite(RawStmt *parsetree,
^~~~~~~~~~~~~~~~~~~~~~
src/pg_paxos.c:864:30: error: passing argument 1 of ‘PreviousProcessUtilityHook’ from incompatible pointer type [-Werror=incompatible-pointer-types]
PreviousProcessUtilityHook(parsetree, queryString, context,
^~~~~~~~~
src/pg_paxos.c:864:30: note: expected ‘PlannedStmt *’ {aka ‘struct PlannedStmt *’} but argument is of type ‘Node *’ {aka ‘struct Node *’}
src/pg_paxos.c:865:20: error: passing argument 5 of ‘PreviousProcessUtilityHook’ from incompatible pointer type [-Werror=incompatible-pointer-types]
params, dest, completionTag);
^~~~
src/pg_paxos.c:865:20: note: expected ‘QueryEnvironment *’ {aka ‘struct QueryEnvironment *’} but argument is of type ‘DestReceiver *’ {aka ‘struct _DestReceiver *’}
src/pg_paxos.c:865:26: error: passing argument 6 of ‘PreviousProcessUtilityHook’ from incompatible pointer type [-Werror=incompatible-pointer-types]
params, dest, completionTag);
^~~~~~~~~~~~~
src/pg_paxos.c:865:26: note: expected ‘DestReceiver *’ {aka ‘struct _DestReceiver *’} but argument is of type ‘char *’
src/pg_paxos.c:864:3: error: too few arguments to function ‘PreviousProcessUtilityHook’
PreviousProcessUtilityHook(parsetree, queryString, context,
^~~~~~~~~~~~~~~~~~~~~~~~~~
src/pg_paxos.c:869:27: error: passing argument 1 of ‘standard_ProcessUtility’ from incompatible pointer type [-Werror=incompatible-pointer-types]
standard_ProcessUtility(parsetree, queryString, context,
^~~~~~~~~
In file included from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/utility.h:40:50: note: expected ‘PlannedStmt *’ {aka ‘struct PlannedStmt *’} but argument is of type ‘Node *’ {aka ‘struct Node *’}
extern void standard_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
~~~~~~~~~~~~~^~~~~
src/pg_paxos.c:870:17: error: passing argument 5 of ‘standard_ProcessUtility’ from incompatible pointer type [-Werror=incompatible-pointer-types]
params, dest, completionTag);
^~~~
In file included from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/utility.h:42:25: note: expected ‘QueryEnvironment *’ {aka ‘struct QueryEnvironment *’} but argument is of type ‘DestReceiver *’ {aka ‘struct _DestReceiver *’}
QueryEnvironment *queryEnv,
~~~~~~~~~~~~~~~~~~^~~~~~~~
src/pg_paxos.c:870:23: error: passing argument 6 of ‘standard_ProcessUtility’ from incompatible pointer type [-Werror=incompatible-pointer-types]
params, dest, completionTag);
^~~~~~~~~~~~~
In file included from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/utility.h:43:21: note: expected ‘DestReceiver *’ {aka ‘struct _DestReceiver *’} but argument is of type ‘char *’
DestReceiver *dest, char *completionTag);
~~~~~~~~~~~~~~^~~~
src/pg_paxos.c:869:3: error: too few arguments to function ‘standard_ProcessUtility’
standard_ProcessUtility(parsetree, queryString, context,
^~~~~~~~~~~~~~~~~~~~~~~
In file included from src/pg_paxos.c:48:
/usr/local/pgsql/include/server/tcop/utility.h:40:13: note: declared here
extern void standard_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [/usr/local/pgsql/lib/pgxs/src/makefiles/../../src/Makefile.global:899: src/pg_paxos.o] Error 1

use of function only updates node where function is called

functions don t work

As you can see, simple table with an insert function. Only applies the function to the node I called the function from. Also, it doesn't matter if the other node has the function or not. I understand this might be because of no support for distributed transactions and that functions are inherently transactional but there is no warning or error message for the same.

connection "paxos_join_group" not available

I'm receiving the following error trying to setup pg_paxos on postgres 9.5.5. This is on a second node I'm trying to add to the group. Looks like this was filed before (#13) but that issue was closed without comment.

postgres=# select paxos_join_group('group0', 'host=10.10.1.1', 'host=10.10.1.2');
ERROR:  connection "paxos_join_group" not available
CONTEXT:  SQL statement "SELECT dblink_disconnect('paxos_join_group')"
PL/pgSQL function paxos_join_group(text,text,text) line 92 at PERFORM

INSERT RETURNING does not return results

E-mail from Sri with steps to reproduce.

On 5 Mar 2016 4:22 pm, "Srivaths" [email protected] wrote:

Got a new problem here:

$ psql
psql (9.4.4)
Type "help" for help.

srangarajan=# select * from barr;
 id | x | y 
----+---+---
  1 | 1 | 2
(1 row)

srangarajan=# insert into barr(x,y) values (1,2) returning x;
--
(1 row)

INSERT 0 1
srangarajan=# \d barr
                         Table "public.barr"
 Column |  Type   |                     Modifiers                     
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('barr_id_seq'::regclass)
 x      | integer | 
 y      | integer |

srangarajan=# insert into bar(x,y) values (1,2) returning x;
--
(1 row)

INSERT 0 1
srangarajan=# \d bar
      Table "public.bar"
 Column |  Type   | Modifiers 
--------+---------+-----------
 x      | integer | 
 y      | integer | 

Basically pg_paxos seems to be eating up the returning value. It doesn't seem to matter if the value being returned was from an auto-incremented field or a normal field, and it also doesn't seem to matter if the table itself had an auto-incrementing column on it or not.

bug in paxos(text, text, bigint, text) function?

periodically see this error:

consumer_node_1.rb:19:in `exec': ERROR:  column "proposal_num" does not exist (PG::UndefinedColumn)
LINE 1: SELECT greatest(max(proposal_num), current_proposal_num) + 1
                            ^
QUERY:  SELECT greatest(max(proposal_num), current_proposal_num) + 1
                                         FROM accept_responses
CONTEXT:  PL/pgSQL function paxos(text,text,bigint,text) line 177 at SQL statement
SQL statement "SELECT * FROM paxos(
                    current_proposer_id,
                    current_group_id,
                    current_round_num,
                    proposed_value)"
PL/pgSQL function paxos_apply_and_append(text,text,text) line 18 at SQL statement
SQL statement "SELECT paxos_apply_and_append($1,$2,$3)"
    from consumer_node_1.rb:19:in `execute_job'
    from consumer_node_1.rb:52:in `<main>'

My guess is that https://github.com/citusdata/pg_paxos/blob/master/sql/pg_paxos.sql#L454 should be:
SELECT greatest(max(**min_**proposal_num), current_proposal_num) + 1

pg_paxos at database level

Hi,

I followed th README tutorial and everything works great.
but once I did the same of other databases it fails when I wanted other nodes to join th group
so I did as superadmin on all nodes user once everything was installed on the main node
psql -d myDB
SELECT paxos_join_group('mokka', 'host=10.0.0.1', 'host=10.0.0.49');
but
ERROR: connection "paxos_join_group" not available
CONTEXT: SQL statement "SELECT dblink_disconnect('paxos_join_group')"
PL/pgSQL function paxos_join_group(text,text,text) line 92 at PERFORM

thanks for your advice

Installation with Postgres 9.6 does not readily work

I tried installing the pg_paxos extension from the latest code on top of postgres 9.6 on ubuntu 16.04. My make and make install of pg_paxos happen without problems. However, when I try to create the pg_paxos extension using the psql command "CREATE EXTENSION ps_paxos", I keep getting an error -- ERROR: could not access file "$libdir/pg_paxos": No such file or directory. Am I missing some steps (I am new to PG) or does the README not mention some obvious steps?

Crash in transaction abort state

Just ran into this:

postgres=# INSERT INTO coordinates VALUES (1, 2);
ERROR:  paxos commands cannot run inside a transaction block
STATEMENT:  INSERT INTO coordinates VALUES (1, 2);
ERROR:  paxos commands cannot run inside a transaction block
postgres=# ROLLBACK;
TRAP: FailedAssertion("!(IsTransactionState())", File: "relcache.c", Line: 1737)
LOG:  server process (PID 11317) was terminated by signal 6: Aborted
DETAIL:  Failed process was running: ROLLBACK;
server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

Leaves the following back-trace:

#0  0x0000003969632625 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x0000003969633e05 in abort () at abort.c:92
#2  0x000000000092d47e in ExceptionalCondition (conditionName=0xb31d96 "!(IsTransactionState())", errorType=0xb319e0 "FailedAssertion", 
    fileName=0xb31944 "relcache.c", lineNumber=1737) at assert.c:54
#3  0x000000000091ae1e in RelationIdGetRelation (relationId=3079) at relcache.c:1737
#4  0x00000000004b678c in relation_open (relationId=3079, lockmode=1) at heapam.c:1063
#5  0x00000000004b6af8 in heap_open (relationId=3079, lockmode=1) at heapam.c:1238
#6  0x0000000000603c2d in get_extension_oid (extname=0x7fe999001b21 "pg_paxos", missing_ok=1 '\001') at extension.c:127
#7  0x00007fe998fec475 in IsPgPaxosActive () at src/pg_paxos.c:268
#8  0x00007fe998fed193 in PgPaxosProcessUtility (parsetree=0x23c2b80, queryString=0x23c2198 "ROLLBACK;", context=PROCESS_UTILITY_TOPLEVEL, params=0x0, 
    dest=0x23c2f08, completionTag=0x7fff5a34d430 "") at src/pg_paxos.c:780
#9  0x00000000007ef9a2 in ProcessUtility (parsetree=0x23c2b80, queryString=0x23c2198 "ROLLBACK;", context=PROCESS_UTILITY_TOPLEVEL, params=0x0, dest=0x23c2f08, 
    completionTag=0x7fff5a34d430 "") at utility.c:330
#10 0x00000000007eea8e in PortalRunUtility (portal=0x23f4998, utilityStmt=0x23c2b80, isTopLevel=1 '\001', dest=0x23c2f08, completionTag=0x7fff5a34d430 "")
    at pquery.c:1183
#11 0x00000000007eec6a in PortalRunMulti (portal=0x23f4998, isTopLevel=1 '\001', dest=0x23c2f08, altdest=0x23c2f08, completionTag=0x7fff5a34d430 "")
    at pquery.c:1314
#12 0x00000000007ee1da in PortalRun (portal=0x23f4998, count=9223372036854775807, isTopLevel=1 '\001', dest=0x23c2f08, altdest=0x23c2f08, 
    completionTag=0x7fff5a34d430 "") at pquery.c:812
#13 0x00000000007e83a4 in exec_simple_query (query_string=0x23c2198 "ROLLBACK;") at postgres.c:1104
#14 0x00000000007ec436 in PostgresMain (argc=1, argv=0x2352580, dbname=0x23523e0 "postgres", username=0x23523c0 "amit") at postgres.c:4030
#15 0x000000000076ac8c in BackendRun (port=0x2371c90) at postmaster.c:4239
#16 0x000000000076a3f7 in BackendStartup (port=0x2371c90) at postmaster.c:3913
#17 0x0000000000766ba8 in ServerLoop () at postmaster.c:1684
#18 0x000000000076626c in PostmasterMain (argc=3, argv=0x2351590) at postmaster.c:1292
#19 0x00000000006be4c6 in main (argc=3, argv=0x2351590) at main.c:228

Replicating a table after all nodes have joined

What I was trying to do is this:

  • Created a group and didn't yet replicate a table
  • Joined server 2 to the group
  • Went back to server 1 and replicated a table
  • Back to server 2, created the same table and inserted a row in it
  • Back at server 1 looking for the row - don't find it
  • Perhaps failed to get the sequence right; tried using a different group (making sure to replicate the table before joining server 2)
  • Could create the new group but couldn't replicate table because:
ERROR:  duplicate key value violates unique constraint "replicated_tables_pkey"

How to go about replicating a table after all nodes have joined?

By the way, I didn't find the tear-down/drop counterpart of paxos_create_group(). Is that a TODO?

cannot use CTEs in core query

with update_some_other_foo as(
  insert into rep_table values(10,1) returning x
)
update rep_table
set y = 10
from update_some_other_foo
where rep_table.x = update_some_other_foo.x;
ERROR:  relation "(null)" is not managed by pg_paxos

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.