Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Hackers

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #11 (permalink)  
Old 05-16-2008, 01:43 PM
Tom Lane
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

"Marko Kreen" <markokr@gmail.com> writes:
> On 5/15/08, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> "Marko Kreen" <markokr@gmail.com> writes:
>>> Eg. how does src/backend/parser/gram.c not leak memory on syntax error?

>>
>> It's not a leak because the memory can be re-used during the next
>> command.


> I may be blind, but I don't see any static variables there.


Sorry, I was confusing bison with flex --- there are static variables
pointing at buffers within a flex scanner.

For bison it looks like defining YYSTACK_ALLOC/YYSTACK_FREE as
palloc/pfree might be a sane thing to do, but I haven't tested it.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #12 (permalink)  
Old 05-16-2008, 01:43 PM
Marko Kreen
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On 5/15/08, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> "Marko Kreen" <markokr@gmail.com> writes:
> > On 5/15/08, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >> "Marko Kreen" <markokr@gmail.com> writes:
> >>> Eg. how does src/backend/parser/gram.c not leak memory on syntax error?
> >>
> >> It's not a leak because the memory can be re-used during the next
> >> command.

>
> > I may be blind, but I don't see any static variables there.

>
> Sorry, I was confusing bison with flex --- there are static variables
> pointing at buffers within a flex scanner.
>
> For bison it looks like defining YYSTACK_ALLOC/YYSTACK_FREE as
> palloc/pfree might be a sane thing to do, but I haven't tested it.


Ok, so parser.y is now fine.

Now I must admit I do the same hack in scanner.l, but because it keeps
static references, there is always call to plproxy_yylex_destroy() in
places that throw exceptions (all of flex/bison/plproxy exceptions
go through single function).

Reason for that is again the fact that I could not wrap my brain around
flex memory handling. And the hacks in src/backend/parser/scan.l are also
somethat mystery to me. When using palloc() I can be sure of the flow,
and if something goes wrong it crashes instead leaking, so it can
be fixed immidately.

But now that I think about it, the scheme fails if palloc() itself
throws exception. It can be fixed by calling following function
on parser entry:

void plproxy_yylex_startup(void)
{
#if FLXVER < 2005031
(YY_CURRENT_BUFFER) = NULL;
#else
(yy_buffer_stack) = NULL;
#endif
plproxy_yylex_destroy();
}

This is pretty hairy, but anything near flex is hairy. Such function
also would drop the requirement that plproxy_yylex_destroy() must always
be called. Then we could keep current simple always-from-scratch allocation
pattern but more robust.


Or we could go back to default malloc usage. I somewhat doubt it will
be much cleaner, it needs lot more faith in sanity of flex which I dont
have.
OTOH, considering that now here the possibility of others reviewing the
result is lot higher than before it can be attempted.

--
marko

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #13 (permalink)  
Old 05-18-2008, 10:03 PM
Steve Singer
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On Thu, 15 May 2008, Marko Kreen wrote:

> On 5/15/08, Josh Berkus <josh@agliodbs.com> wrote:
>> Has PL/proxy been tested on other OSes? FreeBSD/Solaris/Windows?

>
> It definitely works on Linux and MacOS. I've seen ports for *BSD.
> I think any unix-like OS-es should work fine.


I've compiled it with a minor Makefile modification on Solaris and it
seems to work (it passes all the unit tests but the one involving
random; we might want to rethink that test so 'passes' on platforms with
different implementations of random()). However, I haven't deployed it into
a production environment.

Somewhat unrelated, I can see use-cases for replacing the call to random()
with something that allows user defined polices for RUN ON ANY.


>
> In fact, only syscalls it does on its own are gettimeofday() and poll()
> [or select()], otherwise it calls either core or libpq functions.
> So I see no reason why it shouldnt already work on Windows.
>
> The biggest portability problem thus far has been scanner.l, which at
> the beginning was written for flex 2.5.33+, but 2.5.4 is still pretty
> widespread. But this I fixed in 2.0.3.
>
> Hmm.. Now that I think about it, in my effort to remove malloc() calls
> in both scanner and parser I told bison to use alloca(). Is it portability
> concern? Easy to fix, just need to be careful not to create memleaks.
>
> --
> marko
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #14 (permalink)  
Old 05-18-2008, 10:03 PM
Josh Berkus
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

Steve,


> I've compiled it with a minor Makefile modification on Solaris and it
> seems to work (it passes all the unit tests but the one involving
> random; we might want to rethink that test so 'passes' on platforms with
> different implementations of random()). However, I haven't deployed it
> into a production environment.


Confirmed on my copy of Nevada 70 (opensolaris) as well.

Looks like we're good on OS support. Now time to start playing with the
semantics ...

--Josh

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #15 (permalink)  
Old 05-18-2008, 10:03 PM
Marko Kreen
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On 5/17/08, Steve Singer <ssinger_pg@sympatico.ca> wrote:
> Somewhat unrelated, I can see use-cases for replacing the call to random()
> with something that allows user defined polices for RUN ON ANY.


Well, thats why the RUN ON userfunc(..); exists. Also notice the function
can tag more that one partition for execution.

Or did you mean something else than partition selection by "user
defined policy"?

--
marko

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #16 (permalink)  
Old 05-18-2008, 10:03 PM
Steve Singer
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On Sat, 17 May 2008, Marko Kreen wrote:

> On 5/17/08, Steve Singer <ssinger_pg@sympatico.ca> wrote:
>> Somewhat unrelated, I can see use-cases for replacing the call to random()
>> with something that allows user defined polices for RUN ON ANY.

>
> Well, thats why the RUN ON userfunc(..); exists. Also notice the function
> can tag more that one partition for execution.
>
> Or did you mean something else than partition selection by "user
> defined policy"?



I see RUN ON userfunc() as being for partitioning where the correctness
requires that the query be run on the result of userfunc. I see RUN ON ANY
as being for load-balancing. You might want to RUN ON ANY with a round
robin balancing, or maybe consider the load of servers for doing the
balancing.

In the case of RUN ON ANY it seems that the database the query gets sent
to doesn't matter. It might make sense for plproxy to try the next database
if it can't connect to the first one it picks. You wouldn't want this for
partitioning queries. If plproxy knows if you mean 'the query has to be run
on these partitions' versus 'run the query on any partition, using method x
to choose' then that type of things would be possible.

Steve

>
> --
> marko
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #17 (permalink)  
Old 05-18-2008, 10:03 PM
Marko Kreen
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On 5/18/08, Steve Singer <ssinger_pg@sympatico.ca> wrote:
> On Sat, 17 May 2008, Marko Kreen wrote:
> > On 5/17/08, Steve Singer <ssinger_pg@sympatico.ca> wrote:
> > > Somewhat unrelated, I can see use-cases for replacing the call to

> random()
> > > with something that allows user defined polices for RUN ON ANY.

> >
> > Well, thats why the RUN ON userfunc(..); exists. Also notice the function
> > can tag more that one partition for execution.
> >
> > Or did you mean something else than partition selection by "user
> > defined policy"?

>
> I see RUN ON userfunc() as being for partitioning where the correctness
> requires that the query be run on the result of userfunc. I see RUN ON ANY
> as being for load-balancing.


Here you see wrong. You should see RUN ON ANY simply as a shortcut
for RUN ON random(); The actual random() would not work as it returns
floats, but equivalent integer random();

So if you want smarter ANY, just implement your function. I don't see
any need for tunable ANY.

> You might want to RUN ON ANY with a round
> robin balancing, or maybe consider the load of servers for doing the
> balancing.
>
> In the case of RUN ON ANY it seems that the database the query gets sent to
> doesn't matter. It might make sense for plproxy to try the next database if
> it can't connect to the first one it picks. You wouldn't want this for
> partitioning queries. If plproxy knows if you mean 'the query has to be run
> on these partitions' versus 'run the query on any partition, using method x
> to choose' then that type of things would be possible.


Ok, here are 2 feature requests, that we have thought ourselves too:

RUN ON LEAST LOADED;

Sorry, this is unimplementable with current PL/Proxy design, as the
per-backend PL-s do not coordinate their usage. And this is deliberate.

If you want to implement this the design should look exactly like
PL/Proxy 1 - each PL does special connection to special pooler that
is responsible for partition selection and thus has information
about partition usage. And the complexity went through the roof...

You may achieve the same effect with smart tcp proxy or if not you
can write load-balancing feature with load check for PgBouncer.

RUN ON ANY PICK NEXT ON ERROR;

This is implementable. But we have not found an actual need for it
ourselves. So I have bothered to implement it as otherwise plproxy
would have another "implementable" and "maybe nice to have" feature
without actual reason like CONNECT, SELECT and get_cluster_config()
turned out to be.

OTOH, here we don't use read-only load balancing much. And such feature
does not make sense when partitioning is used. But it indeed makes
sense for load-balancing. So I'm not against adding it.

--
marko

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #18 (permalink)  
Old 05-20-2008, 05:57 PM
Hannu Krosing
 
Posts: n/a
Default Re: [rfc,patch] PL/Proxy in core

On Wed, 2008-05-14 at 23:29 +0300, Marko Kreen wrote:

> There are few code beautification ideas on which I'd like to
> get feedback from wider audience:
>
> - Drop CONNECT statement. This was added to make creating
> simple dblink style calls easier, but actually its not
> maintainable compared to CLUSTER, it can be used only
> for occasional hacks. OTOH, if we want to deprecate
> dblink and replace it with PL/Proxy, it should probably stay.
>
> - Drop SELECT statement. This was added as it was simple to do
> and also to be straightforward replacement for dblink. But
> it's conceptually ugly. Also it gives impression that there
> will be UPDATE, DELETE and IF... which will not happen.


I'd also suggest one feature request

- Add COPY FROM/TO support

The way It could be done is similar to (now deprecated) SELECT

CREATE FUNCTION copy_users_to_partitions()
RETURNS VOID AS $$
CLUSTER 'userdb';
RUN ON hashtext(text::$1);
COPY users FROM stdin;
$$ LANGUAGE plproxy;

and it should be used like COPY is currently

proxydb# SELECT copy_users_to_partitions();
bob bobspwd bob@email.com
ben benspwd ben@email.com
....
amy amyspwd amy@email.com
..
copy_users_to_partitions
--------------------------

(1 row)

I am not sure how easy it is to get access to "stdin" from inside a function,
but the version of COPY which copies from filesystem can surely be done.

On slaves it will always be plain COPY with STDIN/STDOUT.

As this reintroduces "direct access to partition tables" feature removed with
SELECT, it should be a feature that can be used by superusers only.

Notice that field type should be given, as it can't be deduced from arguments.

COPY .. TO would usually (but not neccessarily) be RUN ON ALL

--------------------
Hannu




--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 09:04 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
UnixAdminTalk.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685